package com.wuxianedu.wxhl.com.wuxianedu.wxhl;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;

import java.io.File;

/**
 * sqlitedatabase 工具类
 * Created by TED on 2016/9/19.
 */
public class DBUtils {

    private static SQLiteDatabase db;

    public static void createDB(Context context) {
        /**
         * 是在文件系统中打开或者创建数据库
         * path: 绝对路径
         */
        Log.i("--getCacheDir-", context.getCacheDir().getAbsolutePath());
        Log.i("-getFilesDir--", context.getFilesDir().getAbsolutePath());
        String path = context.getCacheDir().getAbsolutePath() + File.separator + "android";
        db = SQLiteDatabase.openOrCreateDatabase(path, null);
        /**
         * 创建或者打开一个私有数据库
         * 默认路径是 data/data/包名/database/
         */
        //  db = context.openOrCreateDatabase("wxhl.db",Context.MODE_PRIVATE , null);
    }

    /**
     * 创建表
     */
    public static void createTable() {
        //db.execSQL(sql) 可以执行大部分的sql ，除了 查询语句
        String slq = "create table student (_id integer primary key , name text, age text)";
        db.execSQL(slq);
    }

    /**
     * 插入数据
     */
    public static void insertData() {
        ContentValues values = new ContentValues();
        values.put("name", "老王");
        //        表名    ， 可空列， 值（键值对的方式存储在ContentValues）
        db.insert("student", "age", values);
    }

    /**
     * 更新数据
     */
    public static void updata() {
        ContentValues valuses = new ContentValues();

        // 占位符：先占一个位置，之后whereArgs中得值会替代占位符,注意顺序
        String[] whereArgs = new String[]{"1", "wxhl"};
        // sql :update student where (age = 1, name = 'wxhl');
        db.update("student", valuses, "age = ?, name = ?", whereArgs);
    }

    /**
     * 删除数据
     */
    public static void deleteData() {
        db.delete("student", "age = ?", new String[]{"30"});
    }


    /**
     * 查询数据，注意结果一定是结果集
     */
    public static void queryData() {
        // sql : SELECT (age , name) from student WHERE (条件)
        //                      ORDER BY( 排序条件) GROUP BY(分组条件) HAVING (分组后，筛选条件)
        // LIMIT (分页查询条件)
        //Cursor :游标  其实就是指向结果集的一个指针 注意，最开始指向的是 表头
        Cursor cursor = db.query("student", new String[]{"age", "name"},
                null, null, null, null, null);

        // 直接使用sql
        //String sql = "select * from student";
        //db.rawQuery(sql, null);
    }

    /**
     * 不要忘了！！！！ 非常重要
     * 关闭数据库
     */
    public static void closeDB() {
        if (db != null && db.isOpen()){
            db.close();
        }
    }

    /**
     * 事务
     * 把多个数据库操作，绑定到一起，看成一个操作（其中如果有一个操作失败了，我们整个操作回滚）
     *
     */

    public void transactionSample(){
        db.beginTransaction();
        try {
            // 执行的数据库操作会看成整体
            DBUtils.insertData();
            DBUtils.insertData();
            DBUtils.insertData();
            DBUtils.insertData();
            DBUtils.insertData();
            db.setTransactionSuccessful();// 如果这行代码被执行了，事务成功了，所以这行只能在try{}中的最后一行执行
        } finally {
            db.endTransaction();
        }
    }

}
